package com.mayfool.gitmanager.core.entity;

import java.util.Objects;

/**
 * @author zhou.xu
 * @description: 项目信息实体类
 * 用于存储Git项目的基本信息，包括项目名称、本地路径和远程仓库地址
 * 重写了equals和hashCode方法，使用远程仓库地址作为唯一标识
 * @date 2025/3/10 21:44
 * @since JDK 1.8
 */
public class ProjectInfo {
    
    /**
     * 项目名称
     */
    private String name;

    /**
     * 项目本地路径
     * 存储项目在本地文件系统中的完整路径
     */
    private String localPath;

    /**
     * 远程仓库地址
     * Git仓库的远程URL，用作项目的唯一标识
     */
    private String remoteUrl;

    /**
     * 默认构造函数
     */
    public ProjectInfo() {
    }

    /**
     * 完整构造函数
     * @param name 项目名称
     * @param localPath 本地路径
     * @param remoteUrl 远程仓库地址
     */
    public ProjectInfo(String name, String localPath, String remoteUrl) {
        this.name = name;
        this.localPath = localPath;
        this.remoteUrl = remoteUrl;
    }

    // Getters and setters
    public String getName() { 
        return name; 
    }

    public void setName(String name) { 
        this.name = name; 
    }

    public String getLocalPath() { 
        return localPath; 
    }

    public void setLocalPath(String localPath) { 
        this.localPath = localPath; 
    }

    public String getRemoteUrl() { 
        return remoteUrl; 
    }

    public void setRemoteUrl(String remoteUrl) { 
        this.remoteUrl = remoteUrl; 
    }

    /**
     * 重写equals方法
     * 使用远程仓库地址作为判断对象相等的依据
     * @param o 要比较的对象
     * @return 如果远程仓库地址相同则返回true，否则返回false
     */
    @Override
    public boolean equals(Object o) {
        if (o == null || getClass() != o.getClass()) return false;

        ProjectInfo that = (ProjectInfo) o;
        return Objects.equals(remoteUrl, that.remoteUrl);
    }

    /**
     * 重写hashCode方法
     * 使用远程仓库地址计算哈希值
     * @return 对象的哈希值
     */
    @Override
    public int hashCode() {
        return Objects.hashCode(remoteUrl);
    }
}